#include <stdio.h>/*该文件包含pringtf()等函?*/
#include <stdlib.h>/*该文件包含exit()等函?*/
#include <malloc.h>/*该文件包含malloc()等函?*/

#define STACK_MAX_SIZE 100 // 栈最多支持存放100个数据元?
#define bool int

typedef struct stack {
    int * base;
    int * top;
    int number_of_elements; // 栈内实际数据元素个数
} * Stack;


// 初始化名为s的栈，初始化成功，返回0，否则返回1y。
int init_stack(Stack * s);

// 入栈。返回值表示是否压栈成功：0，成功；1，不成功。
int push(Stack s, char operator_or_operand);

// 出栈。返回值表示是否出栈成功：0，成功，1，不成功。
int pop(Stack s, char * p_operator_or_operand);

// 只返回栈顶元素，通过result变量返回栈顶元素的值。函数返回值用于表示执行状态：0，成功；1，不成功。
int get_top(Stack s, char * symbol);

// 判断刚扫描到的symbol是否操作符。如果symbol是操作符，返回1，否则返回0。
bool is_operator(char symbol);

// 判断刚扫描到的symbol是否操作数。如果symbol是操作数，返回1，否则返回0。
bool is_operand(char symbol);

// 用于计算表达式的值，比如#3*(2+6)/4#。
// 返回值表示求值状态：0，合法表达式，成功求值；1，表达式不合法1。
// result变量用于返回计算结果。
int evaluate(char * expression, int * result);